import json

def load_json_file(file_path):
    """加载JSON文件并返回数据"""
    try:
        with open(file_path, 'r', encoding='utf-8') as file:
            return json.load(file)
    except FileNotFoundError:
        print(f"错误: 文件 {file_path} 未找到")
        return None
    except json.JSONDecodeError:
        print(f"错误: 文件 {file_path} 不是有效的JSON格式")
        return None
    except Exception as e:
        print(f"加载文件 {file_path} 时发生错误: {e}")
        return None

def save_json_file(data, file_path):
    """将数据保存到JSON文件"""
    try:
        with open(file_path, 'w', encoding='utf-8') as file:
            json.dump(data, file, ensure_ascii=False, indent=4)
        print(f"已成功保存到 {file_path}")
        return True
    except Exception as e:
        print(f"保存文件 {file_path} 时发生错误: {e}")
        return False

def remove_entries_by_id(source_data, id_list_data, id_key='id'):
    """从源数据中删除在ID列表数据中存在相同ID的条目"""
    # 提取所有要删除的ID
    ids_to_remove = set(item[id_key] for item in id_list_data if id_key in item)
    
    # 过滤源数据
    filtered_data = [item for item in source_data if item.get(id_key) not in ids_to_remove]
    
    print(f"共处理 {len(source_data)} 条数据，删除了 {len(source_data) - len(filtered_data)} 条数据")
    return filtered_data

def main():
    # 直接在代码中指定文件路径，无需控制台输入
    source_file = "processed_NewGZ_tag/train/cleaned_train2.json"       # 源JSON文件路径
    id_list_file = "filtered_tag_field_length_gt10.json"  # 包含要删除ID的JSON文件路径
    output_file = "result.json"       # 处理后的结果文件路径
    id_key = "image"                     # ID字段的键名，根据实际情况修改
    
    # 加载数据
    source_data = load_json_file(source_file)
    id_list_data = load_json_file(id_list_file)
    
    if not source_data or not id_list_data:
        print("数据加载失败，程序退出")
        return
    
    # 验证数据格式是否为列表
    if not isinstance(source_data, list) or not isinstance(id_list_data, list):
        print("错误: 两个JSON文件都必须包含列表数据")
        return
    
    # 处理数据
    result_data = remove_entries_by_id(source_data, id_list_data, id_key)
    
    # 保存结果
    save_json_file(result_data, output_file)

if __name__ == "__main__":
    main()
    